library(tidyverse)
library(tictoc)
library(patchwork)
library(smatr)
library(ggpubr)
library(ggsma)
library(kableExtra)
source("../scripts/util.R")theme_set(theme_bw())
theme_update(text = element_text(family = "Arial"))d <- read_csv("../data/full_data.csv")
d_cv <- read_csv("../data/full_data_cv.csv")
d <- d |>
filter(!is.na(LMAdisc)) |>
filter(!is.na(LMAleaf)) |>
filter(!is.na(LTleaf)) |>
rename(LT = LTleaf) |>
rename(LA = LAleaf) |>
filter(Location %in% c("Ailao_understory", "Mengla_Bubeng", "Yuanjiang_Savanna", "Yakushima")) |>
#filter(Location != "Yakushima") |>
mutate(LMAratio = LMAleaf / LMAdisc) |>
mutate(LDratio = LDleaf / LDdisc)
LA1 <- quantile(d$LA, 0.25, na.rm = TRUE)
LA2 <- quantile(d$LA, 0.5, na.rm = TRUE)
LA3 <- quantile(d$LA, 0.75, na.rm = TRUE)
LT1 <- quantile(d$LT, 0.25, na.rm = TRUE)
LT2 <- quantile(d$LT, 0.5, na.rm = TRUE)
LT3 <- quantile(d$LT, 0.75, na.rm = TRUE)
LA_mid <- median(d$LA)
LT_mid <- median(d$LT, na.rm = TRUE)
d <- d |>
mutate(LT_gr = case_when(
LT < LT1 ~ "Very~thin",
LT < LT2 ~ "Thin",
LT < LT3 ~ "Thick",
TRUE ~ "Very~thick")) |>
mutate(LT_gr = factor(LT_gr, levels = c("Very~thin", "Thin", "Thick",
"Very~thick"))) |>
mutate(LA_gr = case_when(
LA < LA1 ~ "Very~small",
LA < LA2 ~ "Small",
LA < LA3 ~ "Large",
TRUE ~ "Very~large")) |>
mutate(LA_gr = factor(LA_gr, levels = c("Very~small", "Small", "Large",
"Very~large"))) |>
mutate(LALT_gr = case_when(
LA < LA_mid & LT < LT_mid ~ "Thin~Small",
LA < LA_mid & LT >= LT_mid ~ "Thick~Small",
LA >= LA_mid & LT < LT_mid ~ "Thin~Large",
LA >= LA_mid & LT >= LT_mid ~ "Thick~Large",
TRUE ~ "aa"
)) |>
mutate(LA_gr2 = ifelse(LA < LA_mid, "Small-leaved~species",
"Large-leaved~species")) |>
mutate(LT_gr2 = ifelse(LT < LT_mid, "Thin-leaved~species",
"Thick-leaved~species"))
d_cv <- d_cv |>
dplyr::select(Species, Location,
LMAleaf_cv = LMAleaf, LMAdisc_cv = LMAdisc,
LDleaf_cv = LDleaf, LDdisc_cv = LDdisc) |>
#full_join(d) |>
filter(!is.na(LMAleaf_cv)) |>
filter(!is.na(LMAdisc_cv))
d_cv2 <- d_cv |>
full_join(d) |>
filter(!is.na(LMAleaf_cv)) |>
filter(!is.na(LMAdisc_cv))
d %>%
head %>%
kable() %>%
kable_styling()| Species | Family | Growthform | EveDec | LeafType | Location | Garden | MAT | MAP | Biomes | Contributor | LMAdisc | LMAleaf | LDdisc | LDleaf | LDMCdisc | LDMCleaf | LT | LTdisc | LA | LMAratio | LDratio | LT_gr | LA_gr | LALT_gr | LA_gr2 | LT_gr2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lithocarpus pachyphyllus | Fagaceae | T | E | S | Ailao_understory | NO | NA | NA | STF | Chen Yajun | 132.76613 | 138.37018 | 0.3628966 | 0.4706799 | 0.4581964 | 0.4441105 | 0.2941667 | 0.3450556 | 67.28300 | 1.0422100 | 1.297008 | Thick | Very~large | Thick~Large | Large-leaved~species | Thick-leaved~species |
| Ternstroemia gymnanthera | Pentaphylacaceae | T | E | S | Ailao_understory | NO | NA | NA | STF | Chen Yajun | 130.18236 | 156.72891 | 0.2538547 | 0.3118546 | 0.3792584 | 0.3750513 | 0.5020556 | 0.4817222 | 22.29350 | 1.2039182 | 1.228477 | Very~thick | Small | Thick~Small | Small-leaved~species | Thick-leaved~species |
| Lyonia ovalifolia | Ericaceae | T | D | S | Ailao_understory | NO | NA | NA | STF | Chen Yajun | 65.38931 | 82.84796 | 0.2734705 | 0.3671061 | 0.3620187 | 0.4093258 | 0.2261667 | 0.2203889 | 48.71267 | 1.2669956 | 1.342398 | Thin | Large | Thin~Large | Large-leaved~species | Thin-leaved~species |
| Litsea cubeba | Lauraceae | T | D | S | Ailao_understory | NO | NA | NA | STF | Chen Yajun | 63.99804 | 63.19796 | 0.2988204 | 0.3099342 | 0.3670618 | 0.3058718 | 0.2034444 | 0.2015556 | 26.06800 | 0.9874983 | 1.037192 | Very~thin | Small | Thin~Small | Small-leaved~species | Thin-leaved~species |
| Viburnum cylindricum | Adoxaceae | T | E | S | Ailao_understory | NO | NA | NA | STF | Chen Yajun | 92.61829 | 119.09017 | 0.2716369 | 0.3367223 | 0.3344615 | 0.3418213 | 0.3539444 | 0.3234444 | 57.21067 | 1.2858171 | 1.239604 | Very~thick | Very~large | Thick~Large | Large-leaved~species | Thick-leaved~species |
| Styrax perkinsiae | Styracaceae | T | D | S | Ailao_understory | NO | NA | NA | STF | Chen Yajun | 70.75560 | 83.62315 | 0.3785759 | 0.4018702 | 0.4303001 | 0.4229883 | 0.2170000 | 0.1771111 | 36.99783 | 1.1818591 | 1.061531 | Very~thin | Large | Thin~Large | Large-leaved~species | Thin-leaved~species |
p_LALT_grid <- d |>
ggplot(aes(x = LMAdisc, y = LMAleaf)) +
geom_point(alpha = 0.8) +
scale_x_log10() +
scale_y_log10() +
geom_abline(slope = 1, intercept = 0, lty = 2) +
geom_sma(se = TRUE) +
facet_grid(LA_gr2~LT_gr2, scale = "free", labeller = label_parsed) +
#facet_wrap(~LALT_gr, scale = "fixed", labeller = label_parsed) +
xlab(expression(Leaf~disc~LMA~(g~m^{-2}))) +
ylab(expression(Whole-leaf~LMA~(g~m^{-2}))) +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
)
ggsave("../figs/LMA_sp_gr.png", p_LALT_grid, width = 6, height = 6)my_col <- RColorBrewer::brewer.pal(4, "RdBu")
p_LALT_grid_both <- d |>
mutate(punch_size = ifelse(Location == "Yakushima", "1.0 cm", "0.6 cm")) |>
ggplot(aes(x = LMAdisc, y = LMAleaf, col = punch_size)) +
geom_point(alpha = 0.6) +
scale_x_log10() +
scale_y_log10() +
geom_abline(slope = 1, intercept = 0, lty = 2) +
geom_sma(se = FALSE) +
scale_color_manual(values = my_col[c(2, 4)],
name = "Diameter of the leaf punch") +
facet_grid(LA_gr2~LT_gr2, scale = "free", labeller = label_parsed) +
#facet_wrap(~LALT_gr, scale = "fixed", labeller = label_parsed) +
xlab(expression(Leaf~disc~LMA~(g~m^{-2}))) +
ylab(expression(Whole-leaf~LMA~(g~m^{-2}))) +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial"),
show.legend = FALSE
) +
theme(legend.position = c(0.3, 0.1),
legend.key.size = unit(0.5, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.text.align = 0,
legend.key.height = unit(0.2, "cm"),
legend.text = element_text(size = 9),
legend.title = element_text(size = 9)
)
ggsave("../figs/LMA_sp_gr_both.png", p_LALT_grid_both, width = 6, height = 6)sma_LMA <- sma(log10(LMAleaf) ~ log10(LMAdisc),
data = d,
elev.test = 0,
slope.test = 1)
sma_LD <- sma(log10(LDleaf) ~ log10(LDdisc),
data = d,
elev.test = 0,
slope.test = 1)
sma_LMA_LALT_gr <- sma(log10(LMAleaf) ~ log10(LMAdisc) * LALT_gr,
data = d,
elev.test = 0,
slope.test = 1)
sma_LD_LALT_gr <- sma(log10(LDleaf) ~ log10(LDdisc) * LALT_gr,
data = d,
elev.test = 0,
slope.test = 1)
my_fun <- function(fit) {
tb1 <- fit$groupsummary |>
mutate(Slope = paste0(round(Slope, 2), " [", round(Slope_lowCI, 2), ", ",
round(Slope_highCI, 2), "]"))|>
mutate(Intecept = paste0(round(Int, 2), " [", round(Int_lowCI, 2), ", ",
round(Int_highCI, 2), "]"))|>
mutate(sig_slope = case_when(
Slope_highCI < 1 ~ "sig",
Slope_lowCI > 1 ~ "sig",
TRUE ~ "ns"
)) |>
mutate(sig_int = ifelse(Int_lowCI * Int_highCI > 0, "sig", "ns")) |>
mutate(r2 = round(r2, 2)) |>
dplyr::select(Slope, Intecept, r2, sig_slope, sig_int, group)
tb2 <- tb1 |>
mutate(Slope = ifelse(sig_slope == "sig", paste0("**", Slope, "**"), Slope)) |>
mutate(Intecept = ifelse(sig_int == "sig", paste0("**", Intecept, "**"),
Intecept)) |>
dplyr::select(Slope, Intecept, `*R^2^*` = r2)
list(tb1, tb2, group = tb1$group)
}
tb0_LMA <- my_fun(sma_LMA)
tb0_LD <- my_fun(sma_LD)
tb2_LMA <- my_fun(sma_LMA_LALT_gr)
tb2_LD <- my_fun(sma_LD_LALT_gr)
#tb_dat <- rbind(cbind(tb0_LMA[[2]], tb0_LD[[2]]),
# cbind(tb2_LMA[[2]], tb2_LD[[2]]))
tb_dat <- rbind(tb0_LMA[[2]], tb2_LMA[[2]])
tb_dat <- cbind(c("All", tb2_LMA$group), tb_dat) |>
as.data.frame()
tb_dat %>%
write_csv("../data/tab1.csv")
colnames(tb_dat)[1] <- "Data"
rownames(tb_dat) <- NULL
tb_dat |>
kable() |>
#pack_rows("all", 1, 1) |>
#pack_rows("Site", 2, 6) |>
#add_header_above(c(" ", "LMA" = 3, "LD" = 3)) |>
kable_styling()| Data | Slope | Intecept | R2 |
|---|---|---|---|
| All | 0.97 [0.94, 1.01] | 0.09 [0.02, 0.16] | 0.87 |
| Thick~Large | 0.93 [0.85, 1.03] | 0.19 [0.01, 0.37] | 0.86 |
| Thick~Small | 1.02 [0.97, 1.07] | 0 [-0.11, 0.11] | 0.93 |
| Thin~Large | 0.91 [0.82, 1.02] | 0.2 [0.02, 0.37] | 0.71 |
| Thin~Small | 0.93 [0.83, 1.03] | 0.16 [-0.02, 0.35] | 0.84 |
tree <- read_csv("../data/tree_data.csv")
tree <- tree |>
filter(!is.na(LMAdisc)) |>
filter(!is.na(LMAleaf)) |>
filter(!is.na(LTleaf)) |>
rename(LT = LTleaf) |>
rename(LA = LAleaf) |>
mutate(Dry_mass_disc2 = case_when(
Location == "Yakushima" ~ LMAdisc * 1.57 * 10^-4 / 2,
TRUE ~ LMAdisc * 0.889 * 10^-4 / 3
)) |>
mutate(Dry_mass_disc = case_when(
Location == "Yakushima" ~ LMAdisc * 1.57 * 10^-4,
TRUE ~ LMAdisc * 0.889 * 10^-4
))
LA1_tree <- quantile(tree$LA, 0.25, na.rm = TRUE)
LA2_tree <- quantile(tree$LA, 0.5, na.rm = TRUE)
LA3_tree <- quantile(tree$LA, 0.75, na.rm = TRUE)
LT1_tree <- quantile(tree$LT, 0.25, na.rm = TRUE)
LT2_tree <- quantile(tree$LT, 0.5, na.rm = TRUE)
LT3_tree <- quantile(tree$LT, 0.75, na.rm = TRUE)
LA_mid_tree <- median(tree$LA, na.rm = TRUE)
LT_mid_tree <- median(tree$LT, na.rm = TRUE)
tree <- tree |>
mutate(LT_gr = case_when(
LT < LT1_tree ~ "Very~thin",
LT < LT2_tree ~ "Thin",
LT < LT3_tree ~ "Thick",
TRUE ~ "Very~thick")) |>
mutate(LT_gr = factor(LT_gr, levels = c("Very~thin", "Thin", "Thick",
"Very~thick"))) |>
mutate(LA_gr = case_when(
LA < LA1_tree ~ "Very~small",
LA < LA2_tree ~ "Small",
LA < LA3_tree ~ "Large",
TRUE ~ "Very~large")) |>
mutate(LA_gr = factor(LA_gr, levels = c("Very~small", "Small", "Large",
"Very~large"))) |>
mutate(LALT_gr = case_when(
LA < LA_mid_tree & LT < LT_mid_tree ~ "Thin~Small",
LA < LA_mid_tree & LT >= LT_mid_tree ~ "Thick~Small",
LA >= LA_mid_tree & LT < LT_mid_tree ~ "Thin~Large",
LA >= LA_mid_tree & LT >= LT_mid_tree ~ "Thick~Large",
TRUE ~ "aa"
)) |>
mutate(LA_gr2 = ifelse(LA < LA_mid_tree, "Small-leaved~individuals",
"Large-leaved~individuals")) |>
mutate(LT_gr2 = ifelse(LT < LT_mid_tree, "Thin-leaved~individuals",
"Thick-leaved~individuals"))p_LALT_tree <- tree |>
ggplot(aes(x = LMAdisc, y = LMAleaf, col = Dry_mass_disc)) +
geom_point(alpha = 0.8) +
scale_color_viridis_c(trans = "log10",
name = "Total dry mass of \nleaf discs (g)") +
scale_x_log10() +
scale_y_log10() +
geom_abline(slope = 1, intercept = 0, lty = 2) +
geom_sma(se = TRUE) +
facet_grid(LA_gr2~LT_gr2, scale = "free", labeller = label_parsed) +
xlab(expression(Leaf~disc~LMA~(g~m^{-2}))) +
ylab(expression(Whole-leaf~LMA~(g~m^{-2}))) +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
) +
theme(legend.position = c(0.39, 0.15),
legend.key.size = unit(0.5, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.text.align = 0,
legend.key.height = unit(0.3, "cm"),
legend.text = element_text(size=7),
legend.title = element_text(size=7))
ggsave("../figs/LMA_ind_gr.png", p_LALT_tree, width = 6, height = 6)my_col <- RColorBrewer::brewer.pal(4, "RdBu")
LMAratio <- tree |>
mutate(punch_size = ifelse(Location == "Yakushima", "1.0 cm", "0.6 cm")) |>
ggplot(aes(Dry_mass_disc, LMAleaf / LMAdisc,
col = punch_size
)) +
geom_point(alpha = 0.6) +
geom_hline(yintercept = 1) +
scale_color_manual(values = my_col[c(2, 4)],
name = "Diameter of the leaf punch") +
xlab("Total dry mass of leaf disc (g)") +
ylab("Whole-leaf LMA / leaf disc LMA") +
theme(
legend.position = c(0.7, 0.75),
legend.key.size = unit(0.5, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.text.align = 0,
legend.key.height = unit(0.3, "cm"),
legend.text = element_text(size=7),
legend.title = element_text(size=7))
LMAratio_LT <- tree |>
mutate(punch_size = ifelse(Location == "Yakushima", "1.0 cm", "0.6 cm")) |>
ggplot(aes(LT, LMAleaf / LMAdisc,
col = Dry_mass_disc
)) +
geom_point(alpha = 0.6) +
geom_hline(yintercept = 1) +
scale_color_viridis_c(trans = "log10",
name = "Total leaf disc \ndry mass (g)") +
#scale_color_viridis_d() +
scale_x_log10() +
xlab("Leaf thickness (mm)") +
ylab("Whole-leaf LMA / leaf disc LMA") +
theme(
legend.position = c(0.7, 0.75),
legend.key.size = unit(0.5, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.text.align = 0,
legend.key.height = unit(0.3, "cm"),
legend.text = element_text(size=7),
legend.title = element_text(size=7))
LMAratio_LA <- tree |>
mutate(punch_size = ifelse(Location == "Yakushima", "1.0 cm", "0.6 cm")) |>
ggplot(aes(LA, LMAleaf / LMAdisc,
col = Dry_mass_disc
)) +
geom_point(alpha = 0.6) +
geom_hline(yintercept = 1) +
scale_color_viridis_c(trans = "log10",
name = "Total leaf disc \ndry mass (g)") +
#scale_color_viridis_d() +
scale_x_log10() +
xlab(expression(Leaf~area~(m^2))) +
ylab("Whole-leaf LMA / leaf disc LMA") +
theme(
legend.position = "none",
#legend.position = c(0.2, 0.75),
legend.key.size = unit(0.5, "cm"),
legend.spacing.y = unit(0.1, "cm"),
legend.text.align = 0,
legend.key.height = unit(0.3, "cm"),
legend.text = element_text(size=7),
legend.title = element_text(size=7))
p_ratio <- LMAratio + LMAratio_LT + LMAratio_LA +
plot_annotation(tag_levels = "a")
ggsave("../figs/LMAratio2.png", p_ratio, width = 9, height = 3)Check for heteroscedasticity.
#LMAratio
lmtest::bptest(lm(log(LMAleaf / LMAdisc) ~ log(Dry_mass_disc), tree))##
## studentized Breusch-Pagan test
##
## data: lm(log(LMAleaf/LMAdisc) ~ log(Dry_mass_disc), tree)
## BP = 50.572, df = 1, p-value = 1.148e-12
lmtest::bptest(lm(log(LMAleaf / LMAdisc) ~ (Dry_mass_disc), tree))##
## studentized Breusch-Pagan test
##
## data: lm(log(LMAleaf/LMAdisc) ~ (Dry_mass_disc), tree)
## BP = 41.48, df = 1, p-value = 1.191e-10
lmtest::bptest(lm(log(LMAleaf / LMAdisc) ~ log(LT), tree))##
## studentized Breusch-Pagan test
##
## data: lm(log(LMAleaf/LMAdisc) ~ log(LT), tree)
## BP = 14.553, df = 1, p-value = 0.0001363
lmtest::bptest(lm(log(LMAleaf / LMAdisc) ~ log(LA), tree))##
## studentized Breusch-Pagan test
##
## data: lm(log(LMAleaf/LMAdisc) ~ log(LA), tree)
## BP = 30.348, df = 1, p-value = 3.61e-08
d_leaf <- d |>
dplyr::select(c(Species:Contributor, LMA = LMAleaf, LDMC = LDMCleaf, LD = LDleaf)) |>
pivot_longer(LMA:LD, names_to = "trait", values_to = "Whole-leaf") |>
filter(Location != "Yakushima" | trait != "LD") |>
filter(Location != "Yakushima" | trait != "LMA")
d_disc <- d |>
dplyr::select(Species, Location, LMA = LMAdisc, LDMC = LDMCdisc, LD = LDdisc) |>
pivot_longer(LMA:LD, names_to = "trait", values_to = "Leaf Disc") |>
filter(Location != "Yakushima" | trait != "LD") |>
filter(Location != "Yakushima" | trait != "LMA")
d2 <- full_join(d_leaf, d_disc) |>
mutate(trait = factor(trait, c("LMA", "LDMC", "LD"))) |>
mutate(trait_lab = factor(trait,
labels = c("LMA~(g~m^{-2})",
"LDMC~(g~g^{-1})",
"LD~(g~cm^{-3})"
)))
p_all <- d2 |>
filter(trait != "LDMC") |>
ggplot(aes(x = `Leaf Disc`, y = `Whole-leaf`)) +
geom_abline(intercept = 0, slope = 1, lty = 2) +
geom_point(alpha = 0.6) +
scale_x_log10() +
scale_y_log10() +
# geom_smooth(method = "lm", se = FALSE) +
geom_sma(se = TRUE) +
facet_wrap(~trait_lab, scale = "free", labeller = label_parsed) +
stat_cor(
#aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~"))
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
# label.x = 2
)
ggsave("../figs/fig1.png", p_all, width = 6, height = 3)p_cv1 <- d_cv |>
ggplot(aes(x = LMAdisc_cv, y = LMAleaf_cv)) +
geom_abline(intercept = 0, slope = 1, lty = 2) +
geom_point(alpha = 0.6) +
scale_x_continuous(trans = "sqrt", breaks = c(0.001, 0.01, 0.05, 0.1)) +
scale_y_continuous(trans = "sqrt", breaks = c(0.001, 0.01, 0.05, 0.1)) +
geom_sma(se = TRUE) +
ylab("CV of whole-leaf LMA") +
xlab("CV of leaf disc LMA") +
coord_fixed() +
stat_cor(
label.x.npc = 0.3,
label.y.npc = 0,
vjust = 1.5,
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
)
p_cv2 <- d_cv |>
filter(Location != "Yakushima") |>
ggplot(aes(x = LMAdisc_cv, y = LMAleaf_cv)) +
geom_abline(intercept = 0, slope = 1, lty = 2) +
geom_point(alpha = 0.6) +
scale_x_continuous(trans = "sqrt") +
scale_y_continuous(trans = "sqrt") +
geom_sma(se = TRUE) +
ggtitle("Diameter: 0.6 cm") +
ylab("CV of whole-leaf LMA") +
xlab("CV of leaf disc LMA") +
#coord_fixed(xlim = c(0.01, 5.4), ylim = c(0.01, 5.4)) +
#coord_fixed() +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
)
p_cv3 <- d_cv |>
filter(Location == "Yakushima") |>
ggplot(aes(x = LMAdisc_cv, y = LMAleaf_cv)) +
geom_abline(intercept = 0, slope = 1, lty = 2) +
geom_point(alpha = 0.6) +
scale_x_continuous(trans = "sqrt") +
scale_y_continuous(trans = "sqrt") +
geom_sma(se = TRUE) +
ggtitle("Diameter: 1.0 cm") +
ylab("CV of whole-leaf LMA") +
xlab("CV of leaf disc LMA") +
#coord_fixed(xlim = c(0.01, 5.4), ylim = c(0.01, 5.4)) +
#coord_fixed() +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
)
p_cv <- (p_cv2 + p_cv3) +
plot_annotation(tag_levels = "a")
ggsave("../figs/fig_cv2.png", p_cv, width = 6, height = 3)
ggsave("../figs/fig_cv.png", p_cv1, width = 3, height = 3)d3 <- read_csv("../data-raw/leaf_traits_for_Katabuchi.csv")
yaku <- d3 |>
filter(Growthform != "H") |>
mutate(Location = "Yakushima") |>
mutate(Biomes = "ST2") |>
mutate(Garden = "NO") |>
mutate(MAT = NA) |>
mutate(MAP = NA) |>
mutate(Contributor = "Onoda Yusuke") |>
rename(
LA = `LA mean (leaf let)`,
LT = `Lamina thickness`,
LMAdisc = `LD LMA`,
LMAleaf = `Whole leaf LMA`,
LDMCleaf = `LDMC`,
LDdisc = `TD`
) |>
mutate(LDleaf = LMAleaf / LT * 10^-3) %>%
mutate(LDMCdisc = NA) |>
mutate(LTdisc = NA) |>
mutate(Growthform = ifelse(Growthform == "W", "Trees", Growthform)) |>
mutate(petiole_ratio = `petiole DW`/`Scanned leaf DW`)
yaku_sp <- yaku |>
group_by(Species) |>
summarize_at(
.vars = vars(
LMAdisc,
LMAleaf,
LDMCdisc,
LDMCleaf,
LDdisc,
LDleaf,
LT,
LTdisc,
LA,
petiole_ratio
),
.funs = \(x)mean(x, na.rm = TRUE)) |>
filter(petiole_ratio > 0) |>
filter(!is.na(LMAdisc))
pet1 <- ggplot(yaku_sp, aes(x = petiole_ratio, y = LMAleaf/LMAdisc)) +
geom_point() +
scale_x_log10() +
#xlab(expression(Petiole/leaf~dry~mass~ratio(g~g^-1))) +
xlab("Petiole / leaf dry mass ratio") +
ylab("Whole-leaf / leaf disc LMA ratio") +
geom_smooth(method = "lm") +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
)
pet2 <- ggplot(yaku_sp, aes(x = petiole_ratio, y = LA)) +
geom_point() +
scale_x_log10() +
scale_y_log10() +
xlab("Petiole / leaf dry mass ratio") +
ylab(expression(Leaf~area~(g~cm^2))) +
geom_smooth(method = "lm") +
stat_cor(
aes(label = paste(..rr.label.., ..n.label.., sep = "~`,`~"), family = "Arial")
)
pet3 <- pet2 + pet1 +
plot_annotation(tag_levels = "a") &
theme(plot.tag = element_text(face = "bold"))
ggsave("../figs/petiole.png", pet3, width = 8, height = 4)devtools::session_info()## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 4.1.2 (2021-11-01)
## os macOS Big Sur 11.6.1
## system aarch64, darwin20.6.0
## ui unknown
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz Asia/Shanghai
## date 2021-12-15
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## package * version date lib source
## abind 1.4-5 2016-07-21 [1] CRAN (R 4.1.0)
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.1.0)
## backports 1.2.1 2020-12-09 [1] CRAN (R 4.1.0)
## bit 4.0.4 2020-08-04 [1] CRAN (R 4.1.0)
## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.1.0)
## broom 0.7.10 2021-10-31 [1] CRAN (R 4.1.2)
## bslib 0.2.5.1 2021-05-18 [1] CRAN (R 4.1.0)
## cachem 1.0.5 2021-05-15 [1] CRAN (R 4.1.0)
## callr 3.7.0 2021-04-20 [1] CRAN (R 4.1.0)
## car 3.0-10 2020-09-29 [1] CRAN (R 4.1.0)
## carData 3.0-4 2020-05-22 [1] CRAN (R 4.1.0)
## cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.1.0)
## cli 3.1.0 2021-10-27 [1] CRAN (R 4.1.2)
## codetools 0.2-18 2020-11-04 [2] CRAN (R 4.1.2)
## colorspace 2.0-2 2021-06-24 [1] CRAN (R 4.1.0)
## crayon 1.4.1 2021-02-08 [1] CRAN (R 4.1.0)
## curl 4.3.2 2021-06-23 [1] CRAN (R 4.1.0)
## data.table 1.14.0 2021-02-21 [1] CRAN (R 4.1.0)
## DBI 1.1.1 2021-01-15 [1] CRAN (R 4.1.0)
## dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.1.0)
## desc 1.3.0 2021-03-05 [1] CRAN (R 4.1.0)
## devtools 2.4.2 2021-06-07 [1] CRAN (R 4.1.1)
## digest 0.6.27 2020-10-24 [1] CRAN (R 4.1.0)
## dplyr * 1.0.7 2021-06-18 [1] CRAN (R 4.1.0)
## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.1.0)
## evaluate 0.14 2019-05-28 [1] CRAN (R 4.1.0)
## fansi 0.5.0 2021-05-25 [1] CRAN (R 4.1.0)
## farver 2.1.0 2021-02-28 [1] CRAN (R 4.1.0)
## fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.1.0)
## forcats * 0.5.1 2021-01-27 [1] CRAN (R 4.1.0)
## foreign 0.8-81 2020-12-22 [2] CRAN (R 4.1.2)
## fs 1.5.0 2020-07-31 [1] CRAN (R 4.1.0)
## generics 0.1.0 2020-10-31 [1] CRAN (R 4.1.0)
## ggplot2 * 3.3.5 2021-06-25 [1] CRAN (R 4.1.0)
## ggpubr * 0.4.0.999 2021-12-14 [1] Github (mattocci27/ggpubr@901fdeb)
## ggsignif 0.6.3 2021-09-09 [1] CRAN (R 4.1.2)
## ggsma * 0.1.0 2021-07-01 [1] Github (mattocci27/ggsma@2b56c57)
## glue 1.4.2 2020-08-27 [1] CRAN (R 4.1.0)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.1.0)
## haven 2.4.1 2021-04-23 [1] CRAN (R 4.1.0)
## highr 0.9 2021-04-16 [1] CRAN (R 4.1.0)
## hms 1.1.0 2021-05-17 [1] CRAN (R 4.1.0)
## htmltools 0.5.1.1 2021-01-22 [1] CRAN (R 4.1.0)
## httr 1.4.2 2020-07-20 [1] CRAN (R 4.1.0)
## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.1.0)
## jsonlite 1.7.2 2020-12-09 [1] CRAN (R 4.1.0)
## kableExtra * 1.3.4 2021-02-20 [1] CRAN (R 4.1.0)
## knitr * 1.33 2021-04-24 [1] CRAN (R 4.1.0)
## labeling 0.4.2 2020-10-20 [1] CRAN (R 4.1.0)
## lattice 0.20-45 2021-09-22 [2] CRAN (R 4.1.2)
## lifecycle 1.0.0 2021-02-15 [1] CRAN (R 4.1.0)
## lmtest 0.9-38 2020-09-09 [1] CRAN (R 4.1.1)
## lubridate 1.7.10 2021-02-26 [1] CRAN (R 4.1.0)
## magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.1.0)
## Matrix 1.3-4 2021-06-01 [2] CRAN (R 4.1.2)
## memoise 2.0.0 2021-01-26 [1] CRAN (R 4.1.0)
## mgcv 1.8-38 2021-10-06 [2] CRAN (R 4.1.2)
## modelr 0.1.8 2020-05-19 [1] CRAN (R 4.1.0)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.1.0)
## nlme 3.1-152 2021-02-04 [1] CRAN (R 4.1.0)
## openxlsx 4.2.4 2021-06-16 [1] CRAN (R 4.1.0)
## patchwork * 1.1.1 2020-12-17 [1] CRAN (R 4.1.0)
## pillar 1.6.4 2021-10-18 [1] CRAN (R 4.1.1)
## pkgbuild 1.2.0 2020-12-15 [1] CRAN (R 4.1.0)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.1.0)
## pkgload 1.2.1 2021-04-06 [1] CRAN (R 4.1.0)
## prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.1.0)
## processx 3.5.2 2021-04-30 [1] CRAN (R 4.1.0)
## ps 1.6.0 2021-02-28 [1] CRAN (R 4.1.0)
## purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.1.0)
## R6 2.5.0 2020-10-28 [1] CRAN (R 4.1.0)
## RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 4.1.0)
## Rcpp 1.0.6 2021-01-15 [1] CRAN (R 4.1.0)
## readr * 2.0.2 2021-09-27 [1] CRAN (R 4.1.1)
## readxl 1.3.1 2019-03-13 [1] CRAN (R 4.1.0)
## remotes 2.4.0 2021-06-02 [1] CRAN (R 4.1.0)
## reprex 2.0.0 2021-04-02 [1] CRAN (R 4.1.0)
## rio 0.5.27 2021-06-21 [1] CRAN (R 4.1.0)
## rlang 0.4.11 2021-04-30 [1] CRAN (R 4.1.0)
## rmarkdown 2.9 2021-06-15 [1] CRAN (R 4.1.0)
## rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.1.0)
## rstatix 0.7.0 2021-02-13 [1] CRAN (R 4.1.0)
## rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.1.0)
## rvest 1.0.0 2021-03-09 [1] CRAN (R 4.1.0)
## sass 0.4.0 2021-05-12 [1] CRAN (R 4.1.0)
## scales 1.1.1 2020-05-11 [1] CRAN (R 4.1.0)
## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.1.0)
## smatr * 3.4-8 2018-03-18 [1] CRAN (R 4.1.0)
## stringi 1.6.2 2021-05-17 [1] CRAN (R 4.1.0)
## stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.1.0)
## svglite 2.0.0 2021-02-20 [1] CRAN (R 4.1.0)
## systemfonts 1.0.2 2021-05-11 [1] CRAN (R 4.1.0)
## testthat 3.0.3 2021-06-16 [1] CRAN (R 4.1.0)
## tibble * 3.1.5 2021-09-30 [1] CRAN (R 4.1.1)
## tictoc * 1.0.1 2021-04-19 [1] CRAN (R 4.1.0)
## tidyr * 1.1.4 2021-09-27 [1] CRAN (R 4.1.1)
## tidyselect 1.1.1 2021-04-30 [1] CRAN (R 4.1.0)
## tidyverse * 1.3.1 2021-04-15 [1] CRAN (R 4.1.1)
## tzdb 0.1.2 2021-07-20 [1] CRAN (R 4.1.1)
## usethis 2.0.1 2021-02-10 [1] CRAN (R 4.1.0)
## utf8 1.2.1 2021-03-12 [1] CRAN (R 4.1.0)
## vctrs 0.3.8 2021-04-29 [1] CRAN (R 4.1.0)
## viridisLite 0.4.0 2021-04-13 [1] CRAN (R 4.1.0)
## vroom 1.5.4 2021-08-05 [1] CRAN (R 4.1.1)
## webshot 0.5.2 2019-11-22 [1] CRAN (R 4.1.0)
## withr 2.4.2 2021-04-18 [1] CRAN (R 4.1.0)
## xfun 0.24 2021-06-15 [1] CRAN (R 4.1.0)
## xml2 1.3.2 2020-04-23 [1] CRAN (R 4.1.0)
## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.1.0)
## zip 2.2.0 2021-05-31 [1] CRAN (R 4.1.0)
## zoo 1.8-9 2021-03-09 [1] CRAN (R 4.1.0)
##
## [1] /opt/homebrew/lib/R/4.1/site-library
## [2] /opt/homebrew/Cellar/r/4.1.2/lib/R/library